package com.dys.testgeneric04;

import java.util.ArrayList;
import java.util.List;

/**
 * @className: com.dys.testgeneric04.BaseGeneric5
 * @description: com.dys.testgeneric04
 * @author: pine cone
 * @version: v1.0.0
 * @createTime: 2024/08/01 下午9:29
 */
public class BaseGeneric5 {
    // 相当于方法的重复定义
    // public void test(List<Object> list1){}
    // public void test(List<String> list2){}
    // public void test(List<Integer> list3){}

    public void a(List<?> list) {
        // 遍历操作
        for (Object obj : list) {
            System.out.println(obj);
        }
        // 写入操作：出错，不能随意写入数据
        list.add(null);
        // list.add("abc");

        // 读取操作：
        Object o = list.get(0);
    }
}

class TestGeneric5 {
    /**
     * 这是一个main()方法,是应用程序的入口
     *
     * @param args 方法的形参列表,是一个字符串数组,包含了从命令行传递给程序的参数
     */
    public static void main(String[] args) {
        // 引入通配符：Java中，泛型类型的类型参数在编译时会被擦除，也就是说，List<Object>、List<String> 和 List<Integer> 在运行时都会被视为 List 类型。
        List<Object> list = new ArrayList<Object>();
        List<String> list2 = new ArrayList<>();
        List<Integer> list3 = new ArrayList<>();

        // A 和 B是子类父类的关系，G<A>和G<B>不存在子类父类关系，是并列的, 加入通配符？后，G<?>就变成了 G<A>和G<B>的父类
        List<?> list4 = null;
        list4 = list;
        list4 = list2;
        list4 = list3;

        BaseGeneric5 bg = new BaseGeneric5();
        bg.a(new ArrayList<String>());
        bg.a(new ArrayList<Integer>());
        bg.a(new ArrayList<Object>());
    }
}
